package org.qqcui.designpattern.principles.isp;

/**
 * 示例二，将示例一中的Interface1拆分成了三个接口，以便于实现接口隔离原则
 *
 * @author cuiqingqiang
 * @version 1.0
 * @date 2020-10-13 21:10
 **/
public class Segregation2 {

	public static void main(String[] args) {

		E e = new E();
		e.depend1(new G());
		e.depend2(new G());
		e.depend3(new G());

		F f = new F();
		f.depend1(new H());
		f.depend4(new H());
		f.depend5(new H());
	}
}

interface Interface2 {
	void operation1();
}

interface Interface3 {
	void operation2();
	void operation3();
}

interface Interface4 {
	void operation4();
	void operation5();
}

class G implements Interface2, Interface3 {

	@Override
	public void operation1() {
		System.out.println("B 实现了 operation1");
	}

	@Override
	public void operation2() {
		System.out.println("B 实现了 operation2");
	}

	@Override
	public void operation3() {
		System.out.println("B 实现了 operation3");
	}
}

class H implements Interface2, Interface4 {

	@Override
	public void operation1() {
		System.out.println("D 实现了 operation1");
	}

	@Override
	public void operation4() {
		System.out.println("D 实现了 operation4");
	}

	@Override
	public void operation5() {
		System.out.println("D 实现了 operation5");
	}
}

class E {
	public void depend1(Interface2 i) {
		i.operation1();
	}
	public void depend2(Interface3 i) {
		i.operation2();
	}
	public void depend3(Interface3 i) {
		i.operation3();
	}
}

class F {
	public void depend1(Interface2 i) {
		i.operation1();
	}
	public void depend4(Interface4 i) {
		i.operation4();
	}
	public void depend5(Interface4 i) {
		i.operation5();
	}
}